GtkSidebar: Scroll when needed
authorMatthias Clasen <mclasen@redhat.com>
Thu, 2 Oct 2014 10:50:33 +0000 (06:50 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 2 Oct 2014 22:06:02 +0000 (18:06 -0400)
gtk/gtksidebar.c

index 6c295507db8ea8f2478447443fe5d700d8f68e99..bac651aeab0e2511d6edadd618cc61a2da486d8b 100644 (file)
 #include "config.h"
 
 #include "gtksidebar.h"
+
+#include "gtklabel.h"
 #include "gtklistbox.h"
+#include "gtkscrolledwindow.h"
 #include "gtkseparator.h"
 #include "gtkstylecontext.h"
-#include "gtklabel.h"
 #include "gtkprivate.h"
 #include "gtkintl.h"
 
@@ -179,15 +181,24 @@ gtk_sidebar_init (GtkSidebar *sidebar)
 {
   GtkStyleContext *style;
   GtkSidebarPrivate *priv;
+  GtkWidget *sw;
 
   priv = gtk_sidebar_get_instance_private (sidebar);
 
-  priv->list = GTK_LIST_BOX (gtk_list_box_new ());
+  sw = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (sw);
+  gtk_widget_set_no_show_all (sw, TRUE);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+                                  GTK_POLICY_NEVER,
+                                  GTK_POLICY_AUTOMATIC);
 
-  _gtk_bin_set_child (GTK_BIN (sidebar), GTK_WIDGET (priv->list));
-  gtk_widget_set_parent (GTK_WIDGET (priv->list), GTK_WIDGET (sidebar));
+  _gtk_bin_set_child (GTK_BIN (sidebar), sw);
+  gtk_widget_set_parent (sw, GTK_WIDGET (sidebar));
+
+  priv->list = GTK_LIST_BOX (gtk_list_box_new ());
   gtk_widget_show (GTK_WIDGET (priv->list));
-  gtk_widget_set_no_show_all (GTK_WIDGET (priv->list), TRUE);
+
+  gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (priv->list));
 
   gtk_list_box_set_header_func (priv->list, update_header, sidebar, NULL);
   gtk_list_box_set_sort_func (priv->list, sort_list, sidebar, NULL);